"use strict";

const Controller = require("egg").Controller;
const puppeteer = require("puppeteer");
const numberList = require("../../const/index"); // 这里面是上面复制的所有电话号码
class HomeController extends Controller {
    async index() {
        const browser = await puppeteer.launch({
            // 使用无头模式，默认为有头(true为无界面模式)
            headless: false,
            // 设置打开页面在浏览器中的宽高
            defaultViewport: {
                width: 1200,
                height: 800,
            },
            // 设置每个步骤放慢/毫秒
            slowMo: 0,
        }); // 返回浏览器实例
        const page = await browser.newPage(); // 创建新页面,并返回页面对象
        // 设置客户端
        await page.setUserAgent(
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
        );
        // 进入指定页面(学信网)
        await page.goto(
            "https://account.chsi.com.cn/passport/login?service=https%3A%2F%2Faccount.chsi.com.cn%2Faccount%2Fj_spring_cas_security_check",
            {
                waitUntil: ["domcontentloaded"],
            }
        );
        await page.type("#username", "你的学信网账号"); // 模拟输入账号（替换成你的学信网账号）
        await page.type("#password", "你的学信网密码"); // 模拟输入密码（替换成你的学信网密码）
        // 模拟点击登录
        await Promise.all([
            page.click("input[name='submit']"),
            page.waitForNavigation(),
        ]);
        let count = 0; // 计数，从电话号码列表中的第一个开始
        await page.click("#setPhone .setinfodivshow"); // 模拟点击修改手机号按钮
        await page.type("#mphone", "你的现手机号"); // 模拟输入现手机号 （替换成你的现手机号）
        await page.type("#pincode", "验证码"); // 模拟输入验证码（第一次自己手动在网站中修改时获取的验证码，验证码24小时有效）
        const newNumberList = numberList.results; // 电话号码列表
        const { ctx } = this;
        const phoneLength = newNumberList.length; // 电话号码列表总数
        while (phoneLength > count) {
            console.log(
                "电话总数：",
                phoneLength,
                "当前数：",
                count,
                "当前号：",
                newNumberList[count].phone11
            );
            await page.evaluate(
                () => (document.getElementById("oldMobilePhone").value = "") // 清空原来的老号码输入框
            );
            await page.type("#oldMobilePhone", newNumberList[count].phone11); // 重新输入原手机号
            // 提交
            await Promise.all([
                page.click("#newbuttonmp"),
                page.waitForNavigation(),
            ]);
            try {
                // 获取提示信息
                const tipesText = await page.$eval(
                    ".validate-tips  span",
                    (el) => el.innerText
                );
                // 提交过后如果获取到'手机号码有误'的提示信息，则计数器加一，继续循环操作
                if (tipesText === "原手机号码有误，请填写正确的手机号") {
                    count += 1;
                }
            } catch (error) {
                // 若获取'原手机号码有误'的提示信息失败，则捕获到异常，说明匹配手机号成功
                console.log("号码匹配成功", newNumberList[count].phone11);
                ctx.body = {
                    msg: "号码匹配成功",
                    data: {
                        phone: newNumberList[count].phone11,
                        count: count,
                    },
                };
                return;
            }
        }
        // 走到这里说明循环完了整个手机号列表，未匹配到对应的手机号
        console.log("未匹配到手机号");
        ctx.body = {
            msg: '"未匹配到手机号"',
            data: {
                length: newNumberList.length,
                count: count,
            },
        };
    }
}

module.exports = HomeController;
